"""
语法糖：编程语言中的特殊写法，往往是为代码简便性、可读性、可拓展性服务的。
"""

# 语法糖1，下划线分割数字
a = 1000000000  # 打个10亿要去数几个零，麻烦
b = 10_0000_0000  # 清晰
c = 10_5555_5555
print(a, b, c)  # 1000000000 1000000000 1055555555

# 语法糖2，交换值
# （算法题里可能就经常遇到，如快排）常用是用一个中间变量，数字的话可以用位运算
b, c = c, b
print(b, c)  # 1055555555 1000000000

# 语法糖3，范围比较
if 10 <= a <= 90:  # python 中可以直接就这么写，不需拆分
    pass

# 语法糖4，字符串乘法
print('-' * 10)  # ----------

# 语法糖5，数组合并
a = [1, 2, 3]
b = [4, 5]
print(a + b)  # [1, 2, 3, 4, 5]

# 语法糖6，数组切片
a = [1, 2, 3, 4, 5, 6, 7]
print(a[3: -1])  # [4, 5, 6]，索引3到索引倒数第一位
print(a[-1])     # 7，直接-1是最后一个元素
print(a[:3])     # [1, 2, 3]取前三个元素
print(a[-3:])    # [5, 6, 7]取后三个元素

# 语法糖7，打包解包
a = [1, 2]
b, c = a
print(b, c)    # 1 2
print([b, c])  # [1, 2]，这里用元组做例子也一直，比如坐标

# 语法糖8. with语句
# 一般操作文件为三步走，打开文件 - 读/写文件 - 关闭文件，考虑仔细还得加异常处理
# with语句能自动关闭文件且自动处理异常
with open('test.txt', 'r') as f:
    data = f.read()

# 语法糖9. 列表推导式
# 举个例子，给a中元素每个+10创建到另一个数组，直接递归很麻烦，列表推导式能很简洁地写成↓
a = [1, 2, 3, 4]
b = [k + 10 for k in a]
print(b)   # [11, 12, 13, 14]
